package lt62

/*
刷题计划    DP
一个机器人位于一个 m x n 网格的左上角 （起始点在下图中标记为 “Start” ）。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角（在下图中标记为 “Finish” ）。

问总共有多少条不同的路径？

求路径+不同  可以用哈希表存储路径

f(i,j)  :  左上角走到(i,j)的数量    i:[0,m)   j:[0,n)
每一步只能向下或者向右移动一步   f(i,j)=f(i-1,j)+f(i,j-1)
如果 i=0，那么 f(i-1,j) 并不是一个满足要求的状态，我们需要忽略这一项；
同理，如果 j=0，那么 f(i,j-1) 并不是一个满足要求的状态，我们需要忽略这一项。

f(0,0)=1  左上角走到左上角
最终答案  f(m−1,n−1)
*/
func uniquePaths(m int, n int) int {
	dp := make([][]int,m)
	for i:= range dp {
		dp[i] = make([]int, n)
		dp[i][0] = 1   //左上角向下，只有一种走法
	}
	for j:=0;j<n;j++{
		dp[0][j] = 1  //第一行初始化，左上角向右一种走法
	}
	for i:=1;i<m;i++{
		for j:=1;j<n;j++{
			dp[i][j] = dp[i-1][j] + dp[i][j-1]
		}
	}
	return dp[m-1][n-1]
}